FIG. 1 is a block diagram of a typical programming environment 10. Generally, electronic files 12 are deposited into a repository 16, i.e., a host computer for storing electronic files. The electronic files 12 may be created by one or more content developers 14, e.g., software programmers.
The electronic files 12 stored in the repository 16 are typically “source files” and “target files.” One or more source files (e.g., files written in source code) may be converted to a target file (e.g., an executable file) that is based on the source files using known software programs such as a compiler. The process of converting the source files to the target file is referred to as “building.” The target file is then tested, and if problems are found, then the source files are changed to correct the problems, and then a new target file is built based on the modified source files. Once the target file functions as desired, it can be distributed to end users.
Presently, in order to build the target file from the source files, a build utility 20 such as a “make utility” is used. A make utility is a software tool for managing and maintaining computer programs. The make utility utilizes a makefile, which is created by the content developers 14 and stored in the repository 16, to identify source files on which the target file depends. When the make utility is run, the make utility rebuilds the target file only if one or more of the source files on which it depends has been changed since the last time the target file was built, thereby saving build time.
In determining when the source files and target file were last updated, the make utility relies on build indicators for the source files and the target file that identify the date and time they were last modified. A “source build indicator” represents the date and time a source file was created or last modified and a “target build indicator” represents the date and time the target file was built. If the target file has a target build indicator that indicates that it was built after the last modification of every source file on which it depends, a build will not be performed since the resulting target file will be based on the same source files as the existing target file and would, therefore, result in an identical target file. On the other hand, if a source file has been modified since the last build of the target file, the target file will be rebuilt.
To build a target file from source files in the typical programming environment 10, the electronic files 12 residing in the repository 16 (including the source files, the target file, and the makefile) are transferred to the host 18 in response to a build request received from a content developer 12, for example. If one or more of the source files have been updated since the last time the target file was built, a build utility 20 at the host 18 utilizes build tools (e.g., a compiler) residing on the host 18 to build a target file from the transferred source files on which the target file depends. This method of building a target file is inefficient.
Inefficiencies arise in the described build process because the target file, all the source files on which the target file depends, and the makefile are transferred from the repository 16 to the host 18 every time a build is requested, even if some or most of the source files have not changed or are already available at the host 18, and even if a build is not required. This is especially problematic when multiple content developers 12 are involved. For example, assume a system having three source files used to build a target file. In addition, assume a first programmer (“X”) updates a first source file and a second programmer (“Y”) updates a second source file, and, then, X requests a build followed by Y requesting a build. When X requests the build, all three source files (and the existing target file and the makefile) are transferred to the host 18, including the source files as updated by X and Y, and a new target file is built from these source files if one or more of them were updated since the last time the existing target file was built. When Y requests the build after X, the process of transferring the source files (and the target file and the makefile) to the host 18 occurs again. This transfer is redundant since the same files are already at the host 18.
Accordingly, there is a need for methods, systems, and products for remotely building electronic files that are more efficient. The present invention fulfills this needs among others.